/*
变量提升
在【当前】作用域当中，把所有带var和function关键字的提前声明或则定义,es6中的let/const并不会

声明和定义
在当前作用域中，js代码自上而下执行之前，浏览器首先会把所有带var/function关键字的进行提前的声明或则定义

    1. 声明(declare): var num;在当前作用域中吼一嗓子 我有num这个名了
    2. 定义(defined)：num=12;把声明的名字赋一个值（先有个值(可能是地址，这意味着就还有个开辟空间的动作)，再把这个值和声明的名字建立链接）

*/



/*
var和function 的区别
带var关键字的只是提前的声明一下(undefined没有定义)；带function关键字的在变量提升阶段把声明和定义都完成了
*/
console.log(numb);//undefined
console.log(fn); //[Function: fn]
var numb = 13;
function fn(){
    //除了全局作用域执行时，函数执行时也会执行自己的变量提升
    console.log(a);//undefined
    var a =10;
    console.log(a);//10
}
fn();
console.log(numb);//13


